/*
 * Project Name : NOBUNAGA
 * Created on 2007/02/14
 */
package jp.sengoku.oda {

	import mx.controls.ComboBox;
	import mx.events.DropdownEvent;


	/**
	 * 拡張コンボボックスクラス
	 * フラグ設定により、ドロップダウンリストの幅を文字幅にフィットさせる
	 * 
	 * @author	morimotohiroki@gmail.com
	 */
	public class KatsuieComboBox extends ComboBox {

		/**
		 * コンストラクタでござる
		 */
		public function KatsuieComboBox() {
			super();
			this.addEventListener(DropdownEvent.OPEN, _openHandler);
		}
		
		/**
		 * ドロップダウンを開くときに処理
		 * 
		 * @param	event
		 * @return	void
		 */
		private function _openHandler(event:DropdownEvent):void {
			this.invalidateProperties();
		}

		/**
		 * override commitProperties
		 * 
		 * @see	mx.controls.ComboBox
		 * @return	void
		 */
		override protected function commitProperties():void {
		    super.commitProperties();

			// ドロップダウンが生成済み
			if (dropdown) {
				// フィットフラグの確認
				if (fit) {
					this.dropdownWidth = this.dropdown.width = dropdown.measureWidthOfItems(0, this.dataProvider.length);
				} else {
					this.dropdownWidth = this.dropdown.width = this.width;
				}
			}			
		}

		/**
		 * override updateDisplayList
		 * 
		 * @see	mx.controls.ComboBox
		 * @return	void
		 */
		override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
			// 選択アイテムがある
			if (selectedLabel) {
				// ツールチップに選択ラベル表示フラグが設定されている
				if (_showLabelTip) {
					toolTip = selectedLabel;
				}
			}
			super.updateDisplayList(unscaledWidth, unscaledHeight);
		}

		// tooltip表示フラグ
		private var _showLabelTip:Boolean = false;
		
		/**
		 * ツールチップ設定
		 * 
		 * @param	flg	Boolean
		 * @return	void
		 */
		public function set showLabelTip(flg:Boolean):void {
			_showLabelTip = flg;
		}
		
		/**
		 * ツールチップ設定取得
		 * 
		 * @return	Boolean
		 */
		public function get showLabelTip():Boolean {
			return _showLabelTip;
		}


		// フィットフラグ
		private var _fit:Boolean = false;

		/**
		 * フィット設定
		 * 
		 * @param	flg	Boolean
		 * @return	void
		 */
		public function set fit(flg:Boolean):void {
			_fit = flg;
			this.invalidateProperties();			
		}

		/**
		 * フィット設定取得
		 * 
		 * @return	Boolean
		 */		
		public function get fit():Boolean {
			return _fit;
		}

	}
}